上一篇我們自己建立了一個 txt 檔案,實際看到只修改一個字元,Hash 就會產生很大的變化。
這讓 Hash 很適合拿來確認資料是否發生改變。
前面介紹 Acquisition 時,我們知道可以將原始儲存媒體製作成 Forensic Image。
那要怎麼確認製作出來的 Image 跟原始證據一致?
就是對兩邊分別計算 Hash,再進行比對。
Original Evidence
↓
SHA-256
↓
Hash A
Forensic Image
↓
SHA-256
↓
Hash B
如果:
Hash A = Hash B
就代表在 Hash 所涵蓋的資料範圍內,兩份資料內容一致。
因此 Hash 可以用來協助驗證 Forensic Image 的完整性。
假設今天拿到一顆電腦硬碟。
裡面可能有:
Windows
Users
Program Files
Downloads
Documents
Pictures
...
可能包含數萬個檔案。
如果每個檔案都要人工打開確認,鑑識人員大概會崩潰。
這時候 Hash 還有另一個非常實用的用途,那就是
快速辨認已知的檔案。
假設我們已經知道某個檔案是正常的 Windows 系統檔案。
例如:
notepad.exe
可以先計算它的 Hash:
notepad.exe
↓
SHA-256
↓
ABC123...
如果我們把大量已知檔案的 Hash 整理起來,就可以建立一個 Hash Database。
例如:
Hash Database
ABC123... → notepad.exe
DEF456... → calc.exe
GHI789... → explorer.exe
這些 Hash 就可以當成「已知檔案的指紋」。
如此一來,鑑識人員就可以快速把大量已知、正常的檔案排除掉,把時間集中在比較值得調查的檔案上。
代表已知正常的檔案,例如:
Windows 系統檔案
常見軟體檔案
如果 Hash 匹配 Known Good,就代表它與資料庫中的已知正常檔案一致。
則可以存放已知的惡意檔案:
Malware
已知惡意工具
其他已知惡意檔案
如果發現:
檔案 Hash
↓
匹配 Known Bad
就值得進一步調查。
假設某個檔案的 Hash 在資料庫裡完全找不到。
這只能代表:
這個檔案不在目前的 Known Hash Database 裡。
不能說:
「找不到 → 所以它是 Malware。」
因為它可能是:
使用者自己建立的檔案
新版本的軟體
客製化程式
資料庫尚未收錄的檔案
新出現的惡意程式
所以 Hash Database 比較像是幫助鑑識人員快速縮小範圍的工具,而不是直接替鑑識人員做最後判斷。
Hash 在鑑識中的兩個重要用途:
Hash
│
├── Integrity Verification
│ └── 確認 Evidence / Forensic Image 是否一致
│
└── File Identification
└── 利用 Known Hash 快速辨認檔案